//package util;
//
//import com.frxs.promotion.page.PageInfo;
//import com.github.pagehelper.Page;
//import com.github.pagehelper.PageException;
//import com.github.pagehelper.PageHelper;
//import com.google.common.collect.Lists;
//import org.springframework.util.Assert;
//
//import java.io.Serializable;
//import java.util.List;
//import java.util.concurrent.Callable;
//import java.util.function.Function;
//
///**
// * 分页工具
// * @author cmw
// * @version $Id: PageUtils.java,v 0.1 2020年11月14日 下午 17:11 $Exp
// */
//public class PageUtils {
//
//	public static  PageInfo<?> EMPTY_PAGE = new PageInfo<>(0L, Lists.newArrayList(), 0, 0, 0);
//
//    private PageUtils(){
//        super();
//    }
//
//	/**
//	 * 返回空分页对象
//	 * @param clazz 类型
//	 * @param <T> 泛型
//	 * @return PageInfo
//	 */
//	public static <T extends Serializable> PageInfo<T> getEmptyPage(Class<T> clazz) {
//		return new PageInfo<>(0L, Lists.newArrayList(), 0, 0, 0);
//	}
//
//	/**
//	 * 查询total的分页（会查两次DB）
//	 * @param pageNum 第几页
//	 * @param pageSize 每页展示数
//	 * @param callable 目标回调执行
//	 * @param <T> 泛型
//	 * @return 返回
//	 */
//    public static <T extends Serializable> PageInfo<T> doSelectPage(int pageNum, int pageSize, Callable<List<T>> callable) {
//        return doSelectPage(pageNum, pageSize, true, callable);
//    }
//
//    public static <T extends Serializable,V extends Serializable> PageInfo<V> doSelectPage(int pageNum, int pageSize, Callable<List<T>> callable,Function<List<T>, List<V>> function) {
//        return doSelectPage(pageNum, pageSize, true, callable,function);
//    }
//
//	/**
//	 *  带分页查询（可以通过count指定是否查询total）
//	 * @param pageNum 第几页
//	 * @param pageSize 每页展示数
//	 * @param count 是否查询total，为false时，不查total（total值为-1）
//	 * @param callable 目标回调执行
//	 * @param <T> 泛型
//	 * @return 返回
//	 */
//	public static <T extends Serializable> PageInfo<T> doSelectPage(int pageNum, int pageSize, boolean count, Callable<List<T>> callable) {
//		try {
//			// 设置分页参数
//			PageHelper.startPage(pageNum, pageSize, count);
//			// 业务查询
//			List<T> list = callable.call();
//			Assert.isInstanceOf(Page.class, list);
//			Page<T> page = (Page<T>) list;
//			long total = page.getTotal();
//			int pages = page.getPages();
//			return new PageInfo<>(total, page,pages,pageNum,pageSize);
//		} catch (Exception ex) {
//			throw new PageException("failed to paging select.", ex);
//		} finally {
//			PageHelper.clearPage();
//		}
//	}
//	public static <T extends Serializable,V extends Serializable> PageInfo<V>  doSelectPage(int pageNum, int pageSize, boolean count, Callable<List<T>> callable,
//			Function<List<T>, List<V>> function) {
//		try {
//			// 设置分页参数
//			PageHelper.startPage(pageNum, pageSize, count);
//			// 业务查询
//			List<T> list = callable.call();
//			Assert.isInstanceOf(Page.class, list);
//			Page<T> page = (Page<T>) list;
//			long total = page.getTotal();
//			int pages = page.getPages();
//			PageInfo<T> pageInfo = new PageInfo<>(total, page, pages, pageNum, pageSize);
//			List<V> list2 = function.apply(list);
//			return pageInfo.transLate(list2);
//		} catch (Exception ex) {
//			throw new PageException("failed to paging select.", ex);
//		} finally {
//			PageHelper.clearPage();
//		}
//	}
//
//
//}
